import { loadGeojson, getFinalPos } from "@/hooks/earth/utils"
import { apiList } from '@/api/apiList';

import { default as proj4 } from "proj4";

import shpKV from './shpKV.json'

import _ from 'lodash'

class Monitor {

  constructor() {
    this.viewer = viewer
    this.geojsonDS = []
    // 添加相关图层
    this._layer = new Cesium.CustomDataSource('targetlayer')
    this.viewer.dataSources.add(this._layer)
    //向图层树添加影像和模型
    let haslayer = false;
    earth.sceneTree.root.children.map((item) => {
      if (_.has(item, "title") && item["title"] == "目标识别分组") {
        haslayer = true;
      }
    });
    if (!haslayer) {
      earth.sceneTree.root.children.push({
        title: "目标识别分组",
        ref: "recognizegroup",
        children: [],
      });
    }
  }

  addTarget(data) {

    this.geojsonDS = []

    this.removeTarget()
    //添加影像
    //添加geojson
    // data.data.map(item => {
    //   if (item.type == 'tif') {
    //     this.loadTif(item)
    //   }
    //   if (item.type == 'shp') {
      //     this.loadShp(item)
      //   }
      // })
      
    
    // this.loadTif({filename: data.data_path.split('\\').pop(), filepath: data.data_path})

    // let tifname = data.data_path.split("\\").pop().split(".")[0]
    // data.shp_path.split(";").map(item => {
    //   if (item.indexOf(tifname)!== -1) {
    //     this.loadShp({filepath: item, ...data})
    //   }
    // })
    this.loadShp({...data})

  }

  loadTif(item) {
    let tmpname = item.filename.split(".")
    tmpname.pop()
    let name = tmpname.join(".");
    let wmsobj = earth.sceneTree.$refs.recognizegroup.children.push({
      ref: name,
      czmObject: {
        xbsjType: "Imagery",
        name: item.target_name,
        xbsjImageryProvider: {
          XbsjImageryProvider: {},
          UrlTemplateImageryProvider: {},
          WebMapServiceImageryProvider: {},
          WebMapTileServiceImageryProvider: {},
          ArcGisMapServerImageryProvider: {},
          GoogleEarthEnterpriseImageryProvider: {},
          createTileMapServiceImageryProvider: {},
          TileMapServiceImageryProvider: {},
          type: "WebMapTileServiceImageryProvider",
        },
      },
    });

    this.srs = 'EPSG:4326'
    
    apiList.genWmsService({file:item.filepath, filename: item.filename}).then(res =>{

      earth.sceneTree.$refs[
        name
      ].czmObject.xbsjImageryProvider.WebMapTileServiceImageryProvider._imageryProvider = new Cesium.WebMapTileServiceImageryProvider({
        //  对与url  很多博客都说要进行 如下拼接
        // 后端返回的wmts/rest/{layer}/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png
        // 其实不用拼接  只需要后端返回的/wtms路径即可
        url: '/geoserver/gwc/service/wmts', //服务地址 服务地址只需要后端返回的 /WMTS   不需要给后面拼接任何东西，  
        layer: `test_tif:${name}`, //图层名称 : "pucheng:satellite"
        style: '',
        format: 'image/png',
        tileMatrixSetID: 'EPSG:4326',  // "EPSG:900913"
        // 地图飞入  定位的坐标  后端返回的数据
        // rectangle: Cesium.Rectangle.fromDegrees(
        //     +this.zb.xmin, +this.zb.ymin, +this.zb.xmax, +this.zb.ymax),
        // 必须加  不然地图出不来
        //之所以要在这里提出这个tileMatrixLabels参数，是因为GeoServer在缓冲切分瓦片时对每一个缩放级别的存储目录没有使用相应的数字，而使用了网格+级别的方式来命名，如“EPSG:9100913:10”表示的是使用“EPSG:9100913”网格切分的第10级瓦片。
        tileMatrixLabels : [`${this.srs}:0`,`${this.srs}:1`, `${this.srs}:2`,`${this.srs}:3`,`${this.srs}:4`,`${this.srs}:5`,`${this.srs}:6`,
        `${this.srs}:7`,`${this.srs}:8`,`${this.srs}:9`,`${this.srs}:10`,`${this.srs}:11`,`${this.srs}:12`,`${this.srs}:13`,`${this.srs}:14`,
        `${this.srs}:15`,`${this.srs}:16`,`${this.srs}:17`,`${this.srs}:18`,
        ],
        // 必须加  不然地图出不来
        tilingScheme: new Cesium.GeographicTilingScheme({//此处很重要，很重要。。。
          numberOfLevelZeroTilesX: 2,
          numberOfLevelZeroTilesY: 1
        }),
        // tilematrixset: this.srs,
        // maximumLevel: 18,
      });

      // earth.sceneTree.$refs[
      //   name
      // ].czmObject.xbsjImageryProvider.WebMapServiceImageryProvider._imageryProvider = new Cesium.WebMapServiceImageryProvider(
      //   {
      //     // 这里是你的 geoserver服务点击查看图层的 url
      //     url: "/geoserver/test_tif/wms",
      //     // 这里是自定义的图层名称
      //     // 需要获取多边形bbox
      //     // rectangle: Cesium.Rectangle.fromDegrees(...getFinalPos(item.details.geometry.coordinates[3],item.details.properties.spatial_ref),...getFinalPos(item.details.geometry.coordinates[1],item.details.properties.spatial_ref)),
      //     parameters: {
      //       service: "WMS",
      //       FORMAT: "image/png",
      //       TRANSPARENT: true,
      //       LAYERS: `test_tif:${name}`,
      //       // LAYERS: "test_tif:TRIPLESAT_2_MS_L1_20201226020854_002764VI_003",
      //     },
      //   }
      // );

      // console.log(res);
    })




  }

  loadShp(item) {
    
    let rescolor = Cesium.Color.fromRandom({
        alpha : 1.0}
    )

    let alltype = {}

    apiList.getShpInfo({ filePath: item.filepath }).then(res => {
      let resjson = res.result
      if (_.has(res.result, 'crs') && res.result.crs.properties.name == null) {
        let crsname = 'wkt' + _.random(0, 999999)
        proj4.defs(crsname, resjson.wkt);
        Cesium.GeoJsonDataSource.crsNames[crsname] = function (coordinates) {
          return Cesium.Cartesian3.fromDegrees(...proj4(crsname, 'EPSG:4326', coordinates), 0)
        }
        res.result.crs.properties.name = crsname
      }

      if (res.result?.crs?.properties?.name == 'CRS:84') {
        delete res.result['crs']
      }

      Cesium.GeoJsonDataSource.load(res.result, {
        stroke: rescolor,
        strokeWidth: 3,
        fill: Cesium.Color.fromAlpha(Cesium.Color.RED, 0.0),
        // stroke: Cesium.Color.HOTPINK,
        // fill: Cesium.Color.fromAlpha(Cesium.Color.RED, 0.3),
        // strokeWidth: 3
      }).then(res => {
        // let name = item.filepath.split("\\").pop().split(".")
        // console.log(name);
        // name.pop()
        // let textname = name.join(".").split("_").pop()
        // textname = _.has(shpKV, textname) ? shpKV[textname] : textname

        res.entities.values.map(e => {

          let rescolor = ''
          if (!_.has(alltype, e.properties.SUBCLASS._value)) {
            alltype[e.properties.SUBCLASS._value] = Cesium.Color.fromRandom({
                alpha : 1.0}
            )
          }
          rescolor = alltype[e.properties.SUBCLASS._value]
          e.position = e.polygon.hierarchy._value.positions[0]
          e.label = {
            // text: e.properties?.QMC + '-' + e.properties?.BHLX,
            // text: name.join(".").split("_").pop(),
            text: e.properties.SUBCLASS._value,
            showBackground: true,
            backgroundColor: rescolor,
            // backgroundColor: Cesium.Color.fromCssColorString("#6C90FE"),
            // backgroundColor: textname,
            scaleByDistance: new Cesium.NearFarScalar(100, 1.0, 50000, 0.0)
          }
          e.polyline = {
            show: true, //是否显示，默认显示
            positions: e.polygon.hierarchy._value.positions,
            width: 2, //线的宽度（像素），默认为1
            // granularity: Cesium.Math.RADIANS_PER_DEGREE,
            material: rescolor, //线的颜色，默认为白色
          }
          // console.log(e);
        })
        this.geojsonDS.push(res)
        viewer.dataSources.add(res)
        viewer.flyTo(res.entities.values)
      })
    })
  }

  removeTarget() {

    if (this.geojsonDS.length != 0) {
      this.geojsonDS.map(item => {
        viewer.dataSources.remove(item)
      })

      this['geojsonDS'] = []
    }
    earth.sceneTree.$refs.recognizegroup.children = [];
    this._layer.entities.removeAll()
  }

}

export default Monitor